package reflect;

import java.lang.reflect.Method;

/**
 * java反射机制
 * 反射是java的动态机制，允许我们在程序运行期间确定对象的实例化操作，方法的调用
 * 和属性的操作等。
 * 反射可以提高代码的灵活度，但是会有
 */
public class ReflectDemo1 {
    public static void main(String[] args) {
        /*
            反射的第一步：获取要操作的类对象‘
            Class类
            Class类成为类对象.JVM在加载一个类时会实例化一个Class实例
            与之对应。每个类都有且只有一个Class的实例.
            通过这个Class实例中提供的一系列方法我们可以在程序
            运行期间了解其表示的类的一切信息（类名，有哪些方法，构造器，属性等）
            以便进行操作.
获取一个类的类对象的方式如下：
1.类名.class
如：
Class cls = String.class；
Class cls = String.class;

2.

3.类加载器ClassLoader获取
 */
        //获取String的类对象
        Class cls = String.class;
        //获取类名，完全限定名（格式：包名.类名）
        String className = cls.getName();
        System.out.println(className);
        //仅获取类名
        className = cls.getName();
        System.out.println(className);

        //获取所有方法
        Method[] methods = cls.getMethods();
        for(Method method : methods) {
            System.out.println("方法名" + method.getName());
            //获取该方法的返回值类型
            Class returnCls = method.getReturnType();
            System.out.println("该方法的返回值类型为：" + returnCls.getName());
        }
    }
    /*

     */
}